package algo3.algocity.vista;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.HashMap;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

import com.sun.javafx.collections.MappingChange.Map;

import algo3.algocity.controlador.Controlador;
import algo3.algocity.modelo.catastrofes.Terremoto;
import algo3.algocity.modelo.mapa.*;
import algo3.algocity.modelo.menu.*;


public class Vista implements PartidaObserver {
	
	private JFrame ventana = new JFrame("AlgoCity");;
	private VistaMapa vistaMapa;
	private JLabel cantidadDeDinero;
	private JLabel areaDeNotificaciones;
	private  Jugador jugador;
	private ArrayList <Jugador> jugadores = new ArrayList<Jugador>();
	Controlador controlador;
	JPanel panelBotonesBienvenida = new JPanel();
	JPanel panelIngresoPorTeclado = new JPanel();
	String nombreJugador;
	
	
	
 public Vista(/*Controlador controlador,*/ Jugador jugador) {
		
	this.jugador = jugador;
	//jugador.agregarObservador(this);
		
	//this.controlador = controlador;
	controlador = new Controlador(jugador,this);
	ventana.setVisible(true);
	
	
    //final JFrame frame = new JFrame();
    //frame.setSize(500, 500);
    //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	
	
		
//	ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	ventana.setSize(750, 750);
	
	ventana.getContentPane().setLayout(null);
	
	//setPanelVistaMapaConBotones();
	//setPanelBienvenida();
 }	
 

 public void setPanelVistaMapaConBotones(){
	 //este es el panel de las vistas subterranea
	
	 ventana.remove(panelIngresoPorTeclado);
	ventana.setLayout(null);
	 
	 ventana.validate();
	 ventana.repaint();
	
	 construirBotoneraConstrucciones(controlador);
	construirGrillaDeTerreno(controlador, jugador);		
	construirPanelDinero(jugador);		
	contruirPanelNotificaciones();
 }
 
 public void setPanelBienvenida(){
	 ventana.setSize(750, 750);
	 
	 construirBotoneraBienvenida(controlador);
	 ventana.setVisible(true);
 }
 
 private void construirBotoneraBienvenida(Controlador controlador) {
	
	
	//	panelBotonesBienvenida.setLayout(new FlowLayout());
		panelBotonesBienvenida.setBounds(0, 0, 750, 750);
	//	panelBotonesBienvenida.setBackground(Color.lightGray);
		//panelBotones.setLayout(new GridLayout(20, 1));
	
		JButton botonIniciarPartida = new JButton("Iniciar Partida");
		botonIniciarPartida.addActionListener(controlador.obtenerIniciarPartidaListener());
		panelBotonesBienvenida.add(botonIniciarPartida);
		
		ventana.getContentPane().add(panelBotonesBienvenida);
		//ventana.getContentPane().add(panelBotonesBienvenida);
		ventana.validate();
		ventana.repaint();
		
		JButton botonContinuarPartida = new JButton(" Continuar  Partida ");
		botonContinuarPartida.addActionListener(controlador.obtenerContinuarPartidaListener());
		panelBotonesBienvenida.add(botonContinuarPartida);
		/*
		JButton botonVerPuntajes = new JButton(" Ver Puntajes ");
		botonVerPuntajes.addActionListener(controlador.obtenerVerPuntajesListener());
		panelBotonesBienvenida.add(botonVerPuntajes);
		*/
	//	JButton botonSalir = new JButton(" Salir ");
	//	botonSalir.addActionListener(controlador.obtenerSalirListener());
	//	panelBotonesBienvenida.add(botonSalir);
			
		
}

private void contruirPanelNotificaciones() {
	JPanel panelNotificaciones = new JPanel();
	panelNotificaciones.setBounds(200, 605, 600, 25);
	panelNotificaciones.setBackground(Color.WHITE);
	ventana.getContentPane().add(panelNotificaciones);
		
	areaDeNotificaciones = new JLabel("Area de notificaciones");
	areaDeNotificaciones.setForeground(Color.RED);
	panelNotificaciones.add(areaDeNotificaciones);
 }

 private void construirPanelDinero(Jugador jugador) {
	JPanel panelDinero = new JPanel();
	panelDinero.setBounds(500, 30, 300, 30);
	panelDinero.setBackground(Color.black);
	ventana.getContentPane().add(panelDinero); 
	
	JLabel labelDinero = new JLabel("simeleons del jugador: ");
	labelDinero.setForeground(Color.gray);
	panelDinero.add(labelDinero);
	//ponerlo de nuevo despues
	cantidadDeDinero = new JLabel("$" + jugador.dinero());
	//agregar
	cantidadDeDinero.setForeground(Color.WHITE);
	panelDinero.add(cantidadDeDinero);
	}

 private void construirGrillaDeTerreno(Controlador controlador,Jugador jugador) {
	
	vistaMapa = new VistaMapa(new EstadoVistaMapaSuperficie(), jugador.obtenerPartida().obtenerMapa());
	vistaMapa.addMouseListener(controlador.obtenerClickSobreElMapaListener());
	vistaMapa.setBounds(250, 0, 750, 750);
	ventana.getContentPane().add(vistaMapa);
	ventana.setVisible(true);
 }
 
 private void construirBotoneraConstrucciones(Controlador controlador) {
	
	JPanel panelBotones = new JPanel();
	panelBotones.setBounds(0, 30, 200, 600);
	panelBotones.setBackground(Color.lightGray);
	panelBotones.setLayout(new GridLayout(20, 1));
	ventana.getContentPane().add(panelBotones);
	
	JLabel labelConstruir = new JLabel("Construir:");
	labelConstruir.setForeground(Color.gray);
	panelBotones.add(labelConstruir);
	
	JButton botonConstruirZonaResidencial = new JButton("Zona Residencial");
	botonConstruirZonaResidencial.addActionListener(controlador.obtenerConstruirResidencialListener());
	panelBotones.add(botonConstruirZonaResidencial);
		
	JButton botonConstruirZonaComercial = new JButton(" Zona  Comercial ");
	botonConstruirZonaComercial.addActionListener(controlador.obtenerConstruirComercialListener());
	panelBotones.add(botonConstruirZonaComercial);
	
	JButton botonConstruirZonaIndustrial = new JButton(" Zona  Industrial ");
	botonConstruirZonaIndustrial.addActionListener(controlador.obtenerConstruirIndustrialListener());
	panelBotones.add(botonConstruirZonaIndustrial);
	
	JButton botonConstruirCalle = new JButton(" Ruta ");
	botonConstruirCalle.addActionListener(controlador.obtenerConstruirRutaListener());
	panelBotones.add(botonConstruirCalle);
		
	JButton botonConstruirPosteLineaDeTension = new JButton(" Linea De Tension ");
	botonConstruirPosteLineaDeTension.addActionListener(controlador.obtenerConstruirLineaDeTensionListener());
	botonConstruirPosteLineaDeTension.setForeground(Color.orange);
	panelBotones.add(botonConstruirPosteLineaDeTension);
	
	JButton botonConstruirCentralMineral = new JButton(" Central Mineral ");
	botonConstruirCentralMineral.addActionListener(controlador.obtenerConstruirCentralMineralListener());
	panelBotones.add(botonConstruirCentralMineral);
		
	JButton botonConstruirCentralEolica = new JButton(" Central Eolica ");
	botonConstruirCentralEolica.addActionListener(controlador.obtenerConstruirCentralEolicaListener());
	panelBotones.add(botonConstruirCentralEolica);
	
	JButton botonConstruirCentralNuclear = new JButton(" Central Nuclear ");
	botonConstruirCentralNuclear.addActionListener(controlador.obtenerConstruirCentralNuclearListener());
	panelBotones.add(botonConstruirCentralNuclear);
		
	JButton botonConstruirPozoDeAgua = new JButton(" Pozo De Agua ");
	botonConstruirPozoDeAgua.addActionListener(controlador.obtenerConstruirPozoDeAguaListener());
	panelBotones.add(botonConstruirPozoDeAgua);
		
	JButton botonConstruirTuberia = new JButton(" Tuberia De Agua ");
	botonConstruirTuberia.addActionListener(controlador.obtenerConstruirTuberiaListener());
	panelBotones.add(botonConstruirTuberia);
	
	JButton botonConstruirBomberos = new JButton(" Bomberos ");
	botonConstruirBomberos.addActionListener(controlador.obtenerConstruirBomberosListener());
	panelBotones.add(botonConstruirBomberos);
	
	JLabel labelControles = new JLabel("Controles:");
	labelControles.setForeground(Color.WHITE);
	panelBotones.add(labelControles);
		
	JButton botonVistaSuperficie = new JButton(" Vista Superficie ");
	botonVistaSuperficie.addActionListener(controlador.obtenerVistaSuperficieListener());
	panelBotones.add(botonVistaSuperficie);
		
	JButton botonVistaSubterranea = new JButton(" Vista Subterranea ");
	botonVistaSubterranea.addActionListener(controlador.obtenerVistaSubterraneaListener());
	panelBotones.add(botonVistaSubterranea);
		
	JButton botonAvanzarTurno = new JButton(" Avanzar Turno ");
	botonAvanzarTurno.addActionListener(controlador.obtenerAvanzarTurnoListener());
	panelBotones.add(botonAvanzarTurno);
 }
	
 @Override
 public void recibirNotificacion() {
		
	cantidadDeDinero.setText("$" + jugador.dinero());
	ventana.validate();
	ventana.repaint();
 }
	
 public void recibirNotificacionDeTerremoto(Terremoto terremoto){
		
 //	EstadoVistaMapaTerremoto estadoVistaTerremoto = new EstadoVistaMapaTerremoto(vistaMapa, terremoto);
	//vistaMapa.cambiarEstado(estadoVistaTerremoto);
	//agregar
	//estadoVistaTerremoto.iniciarAnimacion();
	areaDeNotificaciones.setText("Hubo un terremoto en la ciudad");
	ventana.validate();
	ventana.repaint();
 }
	
 public JLabel getAreaDeNotificaciones(){
		
 	return areaDeNotificaciones;
 }
	
 public JLabel getCantidadDeDinero(){
		
 	return cantidadDeDinero;
 }
	
 public void cambiarAVistaSuperficie(){
		
	
	 
		// setPanelVistaMapaConBotones();
		 vistaMapa.cambiarEstado(new EstadoVistaMapaSuperficie());
	 
	 ventana.validate();
	ventana.repaint();
	
 }
	
 public void cambiarAVistaSubterranea(){
	
	if(vistaMapa != null)	
	vistaMapa.cambiarEstado(new EstadoVistaMapaSubterranea());
	ventana.validate();
	ventana.repaint();
	
 }

	/*
	public void mostrarInfo(Coordenada posicionDeClick) {
		
		VistaInformacionConstruccion infoVentana = new VistaInformacionConstruccion(jugador.obtenerPartida().obtenerMapa().obtenerUnSectorDelMapa(posicionDeClick.obtenerPosicionX(),posicionDeClick.obtenerPosicionY()).obtenerMegaConstruccion(), vistaMapa);
		infoVentana.setVisible(true);
	}*/
	
 public void notificaUsuario(String mensaje){
		
	System.out.println(mensaje);
	areaDeNotificaciones.setText(mensaje);
 }
	
public void cambiarAVistaIngresoPorTecladoNuevoJugador() {

	   JLabel headerLabel;
	   JLabel statusLabel;
	   JPanel controlPanel;
	   TextField textField;
	   ventana.setLayout(new GridLayout(3, 1));
       ventana.remove(panelBotonesBienvenida);
       headerLabel = new JLabel();
     //headerLabel.setAlignment(Label.CENTER);
       statusLabel = new JLabel();        
     //statusLabel.setAlignment(Label.CENTER);
       statusLabel.setSize(350,100);

      // controlPanel = new JPanel(); 
       panelIngresoPorTeclado.setBounds(0,0,750,750);
       panelIngresoPorTeclado.setLayout(new FlowLayout());

      ventana.add(headerLabel);
      ventana.add(panelIngresoPorTeclado);
      ventana.add(statusLabel);
      headerLabel.setText("Ingrese Nombre Del Jugador");      
      textField  = new TextField(20);

      textField.addKeyListener(new CustomKeyListener(statusLabel, textField));
      Button okButton = new Button("Comenzar");
   

      panelIngresoPorTeclado.add(textField);
      panelIngresoPorTeclado.add(okButton);    
      ventana.setVisible(true);  
      if(textField.getText() == "hola" ){
      System.out.println("entra aca una vez");
      }
     
      okButton.addActionListener(new ActionListener() {
     	 

  		private Jugador jugador;

  		public void actionPerformed(ActionEvent e) {
              
      		 // if(textField.getText() == "hola"){
      		//	  System.out.println(textField.getText());  
      		//  }
      		  nombreJugador = textField.getText();
      		 // statusLabel.setText("Entered text: " + textField.getText());                
  	        
      	  	}

  		
});

      System.out.println(nombreJugador);

      ventana.validate();
	  ventana.repaint(); 
	  
	  
 }		


 
 public static void main(String[] args) {
		
	Mapa mapa = new Mapa();
	Jugador jugador = new Jugador();
	
 	Vista vista = new Vista(jugador);	
 	//vista.cambiarAVistaIngresoPorTeclado();
 	
 	//vista.setPanelVistaMapaConBotones();
 	
 	//vista.cambiarAVistaSuperficie();
 	vista.setPanelBienvenida();
 }

 public void cambiarAVistaIngresoPorTecladoJugadorExistente() {
	
	
	   JLabel headerLabel;
	   JLabel statusLabel;
	   JPanel controlPanel;
	   TextField textField;
	  
	   ventana.setLayout(new GridLayout(3, 1));
       
	   ventana.remove(panelBotonesBienvenida);
       headerLabel = new JLabel();
     //headerLabel.setAlignment(Label.CENTER);
       statusLabel = new JLabel();        
     //statusLabel.setAlignment(Label.CENTER);
       statusLabel.setSize(350,100);

       //controlPanel = new JPanel(); 
       panelIngresoPorTeclado.setBounds(0,0,750,750);
       panelIngresoPorTeclado.setLayout(new FlowLayout());

      ventana.add(headerLabel);
      ventana.add(panelIngresoPorTeclado);
      ventana.add(statusLabel);
      headerLabel.setText("Ingrese Nombre Del Jugador");      
      textField  = new TextField(20);

      textField.addKeyListener(new CustomKeyListener(statusLabel, textField));
      Button botonComenzar = new Button("Comenzar");
   

      panelIngresoPorTeclado.add(textField);
      panelIngresoPorTeclado.add(botonComenzar);    
      ventana.setVisible(true);  
      if(textField.getText() == "hola" ){
      System.out.println("entra aca una vez");
      }
     
      botonComenzar.addActionListener(controlador.obtenerBotonComenzar());  
		
		
     	 
    	  //ventana.validate();
    	  // 	ventana.repaint(); 
 }
 
}
